<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of teste
 *
 * @author Lucas Pinheiro
 */
class Midia extends Admin {

    public function __construct() {
        parent::__construct();
        $this->load->language('midias/midia_layout');
        $this->parser->set_title_pagina('Conteúdo', 'adm/conteudo');
        $this->parser->set_title('Conteúdo');
        $this->load->model('midias/midia_model');
        $this->load->model('midias/midia_tipos_model');
        $this->load->model('midias/midia_has_user_model');
        $this->load->model('midias/midia_detalhes_model');
        $this->load->helper('midias/combos');
        $this->load->helper('text');
        $this->load->library('icons');
    }

    public function index() {
        $this->parser->site_view('midias/dashboard', array());
    }

    public function consultar() {
        $this->remover();
        $params = array();
        if ($this->uri->segment(5, 'parte') != 'parte') {
            $params['AND']['mt.' . $this->uri->segment(5)] = $this->uri->segment(6);
        }
        $params['CAMPOS'] = '*';
        $params['AND']['campo'] = 'orig_name';
        $params['ORDERBY'] = 'm.data_hora_cadastro DESC, m.id_midia DESC';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );
        $params['GROUPBY'] = 'm.id_midia';

        $b_consultar_total = $this->midia_model->total($params);
        $params['LIMIT']['inicio'] = $this->uri->segment(7, 0);
        $params['LIMIT']['fim'] = $this->config->item('registro_por_pagina_cms');
        $b_consultar = $this->midia_model->consultar($params);

        $v_dados = array();
        $v_dados['midias_conteudo'] = array();
        $v_dados['paginacao'] = '';
        $v_dados['midia_filtos'] = array_merge($this->get_midia_tipos(1), $this->get_midia_tipos(2, false));
        $v_dados['lang_title_consulta'] = $this->lang->line('lang_title_consulta');
        if ($b_consultar != NULL) {
            foreach ($b_consultar as $k => $v) {
                $v_dados['midias_conteudo'][$k]['id_midia'] = $v->id_midia;
                $v_dados['midias_conteudo'][$k]['id_midia_tipos'] = $v->id_midia_tipos;
                $v_dados['midias_conteudo'][$k]['data_hora_cadastro'] = formatarData($v->data_hora_cadastro, array('formato' => 'd/m/Y H:i:s'));
                $v_dados['midias_conteudo'][$k]['tipo_completo'] = $v->tipo_completo;
                $v_dados['midias_conteudo'][$k]['parte_1'] = $v->parte_1;
                $v_dados['midias_conteudo'][$k]['parte_2'] = $v->parte_2;
                $v_dados['midias_conteudo'][$k]['id_user'] = $this->session->userdata('usuario_nome');
                $v_dados['midias_conteudo'][$k]['id_midia_detalhes'] = $v->id_midia_detalhes;
                $v_dados['midias_conteudo'][$k]['campo'] = $v->campo;
                $v_dados['midias_conteudo'][$k]['valor'] = character_limiter($v->valor, 30);
                $v_dados['midias_conteudo'][$k]['acao'] = '<a href="' . base_adm('midias/midia/detalhes/' . $v->id_midia) . '" title="' . $this->lang->line('lang_acao_detalhes') . '" class="button middle dialog_detalhes"><span class="icon icon112"></span></a>';
                $v_dados['midias_conteudo'][$k]['acao'] .= '<a href="' . base_adm('midias/midia/download/' . $v->id_midia . '/' . url_title($v->valor, '_', TRUE)) . '" title="' . $this->lang->line('lang_acao_download') . '" class="button middle"><span class="icon icon70"></span></a>';
                $v_dados['midias_conteudo'][$k]['acao'] .= '<a href="' . base_adm('midias/midia/excluir/' . $v->id_midia) . '" title="' . $this->lang->line('lang_acao_excluir') . '" class="button middle dialog_excluir"><span class="icon icon186"></span></a>';

                if (!isset($v_dados['midias_conteudo'][$k]['imagem'])) {
                    $v_dados['midias_conteudo'][$k]['imagem'] = $this->get_imagem($v->id_midia, FALSE, 25, 25);
                }
            }
            $this->load->library('pagination');
            $config['base_url'] = base_adm('midias/midia/consultar/' . $this->uri->segment(5, 'parte') . '/' . $this->uri->segment(6, 0));
            $config['total_rows'] = $b_consultar_total;
            $config['per_page'] = $params['LIMIT']['fim'];
            $config['uri_segment'] = 7;
            $this->pagination->initialize($config);

            $v_dados['paginacao'] = $this->pagination->create_links();
        }
        $this->parser->site_view('lst_midia', $v_dados);
    }

    public function images_json() {

        $params = array();
        $params['AND']['mt.parte_1'] = 'image';
        $params['CAMPOS'] = '*';
        $params['AND']['campo'] = 'orig_name';
        $params['ORDERBY'] = 'm.data_hora_cadastro DESC, m.id_midia DESC';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );

        $b_consultar = $this->midia_model->consultar($params);

        $v_dados = array();
        //{ "thumb": "json/images/1_m.jpg", "image": "json/images/1.jpg", "title": "Image 1", "folder": "Folder 1" },
        if ($b_consultar != NULL) {
            foreach ($b_consultar as $k => $v) {
                if (file_exists(FCPATH . 'arquivos/' . $v->valor)) {
                    $v_dados[$v->id_midia]['thumb'] = base_url('arquivos/' . $v->valor);
                    $v_dados[$v->id_midia]['image'] = base_url('arquivos/' . $v->valor);
                    $v_dados[$v->id_midia]['title'] = $v->valor;
                    $v_dados[$v->id_midia]['folder'] = $v->parte_2;
                }
            }
        }
        echo json_encode($v_dados);
    }

    private function get_imagem($id_midia, $return_img = FALSE, $width = 280, $height = 280) {
        $params2 = array();
        $params2['AND']['id_midia'] = $id_midia;
        $params2['AND']['campo'] = 'orig_name';

        $b_detalhes = $this->midia_detalhes_model->get($params2);

        if ($return_img === FALSE) {
            return '<img src="' . $this->icons->icons_types($b_detalhes->valor) . '" style="max-height: ' . $width . 'px; max-width: ' . $height . 'px; text-align: center; margin: 5px auto;" />';
        } else {
            return '<img src="' . base_url('arquivos/' . $b_detalhes->valor) . '" style="max-height: ' . $width . 'px; max-width: ' . $height . 'px; text-align: center; margin: 5px auto;" />';
        }
    }

    public function download() {
        $params['AND']['m.id_midia'] = $this->uri->segment(5);
        $params['CAMPOS'] = '*';
        $params['ANDIN']['md.campo'] = array('full_path', 'orig_name');
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );
        $b_consultar = $this->midia_model->consultar($params);
        $data = $name = '';
        foreach ($b_consultar as $key => $value) {
            if ($value->campo === 'full_path') {
                $data = file_get_contents($value->valor);
            } else if ($value->campo === 'orig_name') {
                $name = $value->valor;
            }
        }
        $this->load->helper('download');
        force_download($name, $data);
        return FALSE;
    }

    public function detalhes() {
        $params['AND']['m.id_midia'] = $this->uri->segment(5);
        $params['ORDERBY'] = 'md.id_midia_detalhes ASC';
        $params['CAMPOS'] = '*';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );
        $b_consultar = $this->midia_model->consultar($params);

        $v_dados['midias_conteudo'] = array();
        $v_dados['lang_title_consulta_detalhes'] = $this->lang->line('lang_title_consulta_detalhes');
        $v_dados['lang_title_consulta_detalhes_imagem'] = $this->lang->line('lang_title_consulta_detalhes_imagem');
        $v_dados['imagem'] = '';

        $id_image = 0;
        $id_midia = 0;

        if ($b_consultar != NULL) {
            foreach ($b_consultar as $k => $v) {
                if ($v->valor != NULL) {
                    $v_dados['midias_conteudo'][$v->id_midia]['id_midia'] = $v->id_midia;
                    $v_dados['midias_conteudo'][$v->id_midia]['data_hora_cadastro'] = formatarData($v->data_hora_cadastro, array('formato' => 'd/m/Y H:i:s'));
                    $v_dados['midias_conteudo'][$v->id_midia]['parte_1'] = $v->parte_1;
                    $v_dados['midias_conteudo'][$v->id_midia]['parte_2'] = $v->parte_2;
                    $v_dados['midias_conteudo'][$v->id_midia]['id_user'] = $this->session->userdata('usuario_nome');
                    $v_dados['midias_conteudo'][$v->id_midia]['midia'][$k]['campo'] = str_replace('_', ' ', ucfirst($v->campo));
                    $v_dados['midias_conteudo'][$v->id_midia]['midia'][$k]['valor'] = str_replace('_', ' ', $v->valor);
                    $v_dados['midias_conteudo'][$v->id_midia]['midia'][$k]['valor_original'] = $v->valor;
                    $id_midia = $v->id_midia;
                    if ($v->campo === 'is_image') {
                        $id_image = $v->valor;
                    }
                }
            }
        }

        $v_dados['imagem'] = $this->get_imagem($id_midia, ($id_image == 1 ? TRUE : FALSE));

        $this->parser->parse('lst_midia_detalhes', $v_dados);
    }

    public function excluir() {
        $params['AND']['m.id_midia'] = $this->uri->segment(5);
        $params['CAMPOS'] = '*';
        $params['AND']['md.campo'] = 'full_path';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );
        $b_consultar = $this->midia_model->get($params);
        $v_dados = array();
        if (file_exists($b_consultar->valor)) {
            if (unlink($b_consultar->valor)) {
                $params = array();
                $params['AND']['id_midia'] = $this->uri->segment(5);
                $b_consultar = $this->midia_model->excluir($params);
                $v_dados['cod'] = 999;
                $v_dados['msg'] = $this->lang->line('lang_delete');
            } else {
                $v_dados['cod'] = 111;
                $v_dados['msg'] = $this->lang->line('lang_delete_error');
            }
        } else {
            $params = array();
            $params['AND']['id_midia'] = $this->uri->segment(5);
            $b_consultar = $this->midia_model->excluir($params);
            $v_dados['cod'] = 999;
            $v_dados['msg'] = $this->lang->line('lang_delete');
        }

        echo json_encode($v_dados);
    }

    private function remover() {
        $params['CAMPOS'] = 'm.id_midia, md.valor';
        $params['AND']['md.campo'] = 'full_path';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'LEFT',
            'AND' => 'm.id_midia = md.id_midia',
        );
        $b_consultar = $this->midia_model->consultar($params);
        $v_dados = array();
        if ($b_consultar != NULL) {
            foreach ($b_consultar as $key => $value) {
                if (!file_exists($value->valor)) {
                    $params = array();
                    $params['AND']['id_midia'] = $value->id_midia;
                    $this->midia_model->excluir($params);
                    $v_dados['cod'] = 999;
                    $v_dados['msg'] = $this->lang->line('lang_delete');
                }
            }
        }

        return json_decode(json_encode($v_dados));
    }

    public function gravar() {
        echo $this->_gravar();
    }

    public function _gravar() {
        $config['upload_path'] = FCPATH . 'arquivos/';
        $config['allowed_types'] = '*';

        $this->load->library('upload', $config);

        $v_dados = array();

        if (!$this->upload->do_upload('file')) {
            $v_dados['cod'] = 111;
            $v_dados['msg'] = $this->upload->display_errors();
        } else {
            $data = $this->upload->data();
            $v_dados['cod'] = 999;
            $v_dados['msg'] = $this->lang->line('lang_insert');
            foreach ($data as $key => $value) {
                $params = array();
                $params['SET']['id_midia_tipos'] = $this->midia_tipos($value);
                $params['SET']['data_hora_cadastro'] = date('Y-m-d H:i:s');
                $v_dados['id_midia'][$key] = $this->midia_model->cadastrar($params);
                $v_dados['dados'][$key] = $value;
                $this->insert_midia_detalhes($value, $v_dados['id_midia'][$key]);
                $this->midia_has_user($v_dados['id_midia'][$key]);
                $this->midia_imagem($value);
            }
        }

        return json_encode($v_dados);
    }

    public function img() {
        $u_dados = json_decode($this->_gravar());
        //pre($u_dados);
        if ($u_dados->cod == 999) {
            //echo '<img title="' . $u_dados->dados[0]->file_name . '" alt="' . $u_dados->dados[0]->file_name . '" src="' . base_url('arquivos/' . $u_dados->dados[0]->file_name) . '" />';
            //{"filelink":"/tmp/images/642612ea684e8d31109eb01634c3e8ea.jpg"}
            echo '{"filelink":"' . base_url('arquivos/' . $u_dados->dados[0]->file_name) . '"}';
        }
    }

    public function file() {
        $u_dados = json_decode($this->_gravar());
        if ($u_dados->cod == 999) {
            echo $u_dados->dados[0]->file_path . '/' . $u_dados->dados[0]->name;
        }
    }

    public function link() {
        $u_dados = json_decode($this->_gravar());
        if ($u_dados->cod == 999) {
            echo '<a title="' . $u_dados->dados[0]->client_name . '" href="' . base_url('imagens/' . $u_dados->dados[0]->name) . '">' . $u_dados->dados[0]->name . '</a>';
        }
    }

    private function insert_midia_detalhes($b_dados, $id_midia) {
        $params = array();
        $params['SET']['id_midia'] = $id_midia;
        foreach ($b_dados as $key => $value) {
            $params['SET']['campo'] = $key;
            $params['SET']['valor'] = $value;
            $this->midia_detalhes_model->cadastrar($params);
        }
        return true;
    }

    private function midia_tipos($b_dados) {
        $params = array();
        $params['AND']['tipo_completo'] = $b_dados['file_type'];
        $b_consultar = $this->midia_tipos_model->get($params);
        if ($b_consultar == NULL) {
            $ex = explode('/', $b_dados['file_type']);
            $params = array();
            $params['SET']['tipo_completo'] = $b_dados['file_type'];
            $params['SET']['parte_1'] = $ex[0];
            $params['SET']['parte_2'] = $ex[1];
            return $this->midia_tipos_model->cadastrar($params);
        } else {
            return $b_consultar->id_midia_tipos;
        }
    }

    private function get_midia_tipos($tipo = 1, $todos = true) {
        $params = array();
        $params['CAMPOS'] = 'mt.parte_' . $tipo . ' as parte';
        $params['GROUPBY'] = 'mt.parte_' . $tipo;
        $params['ORDERBY'] = 'mt.parte_' . $tipo;
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaTipos') . ' as mt',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia_tipos = mt.id_midia_tipos',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaHasUser') . ' as mhu',
            'TIPO' => 'INNER',
            'AND' => 'm.id_midia = mhu.id_midia AND mhu.id_user = ' . $this->session->userdata('usuario_id_user'),
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item('tblMidiaDetalhes') . ' as md',
            'TIPO' => 'INNER',
            'AND' => 'mhu.id_midia = md.id_midia',
        );

        $b_consultar = $this->midia_model->consultar($params);

        $v_dados = array();
        if ($todos == true) {
            $v_dados[0]['nome_filtro'] = 'Todos';
            $v_dados[0]['link_filtro'] = base_adm('midias/midia/consultar/parte');
        }
        if ($b_consultar != NULL) {
            foreach ($b_consultar as $key => $value) {
                $v_dados[$key + 1]['nome_filtro'] = ucfirst($value->parte);
                $v_dados[$key + 1]['link_filtro'] = base_adm('midias/midia/consultar/parte_' . $tipo . '/' . $value->parte);
            }
        }
        return $v_dados;
    }

    private function midia_has_user($id_midia) {
        $params = array();
        $params['SET']['id_midia'] = $id_midia;
        $params['SET']['id_user'] = $this->session->userdata('usuario_id_user');
        $this->midia_has_user_model->cadastrar($params);
        return TRUE;
    }

    private function midia_imagem($b_dados) {
        if ($b_dados['is_image'] == 1) {
            if ($b_dados['file_ext'] != '.gif') {
                $config['image_library'] = 'gd2';
                $config['source_image'] = $b_dados['full_path'];
                $config['create_thumb'] = FALSE;
                $config['quality'] = 70;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = $b_dados['image_width'];
                $config['height'] = $b_dados['image_height'];

                $this->load->library('image_lib', $config);

                $this->image_lib->resize();
                $this->image_lib->clear();
            }
        }
        return TRUE;
    }

}
